package cn.han.oop.cn.han.Exception;

import java.util.InputMismatchException;
import java.util.Scanner;

//本类用做异常的入门案例
public class ExceptionDemo {
    public static void main(String[] args) {
//        method();//异常暴露
//        method1();//捕获异常
//        method2();//抛出异常
        method3();//解决异常
    }

    private static void method3() {//解决异常，为了在调用main之前就处理掉异常
        try{
            method2();
        }catch (Exception e ){
            System.out.println("4");
        }
    }

    //向上抛出
    /*谁调用这个方法谁来解决
    *格式：在方法的小括号与大括号之间写：throws 异常类型
    *但是注意：我们一般不把异常直接抛给main方法，没人解决，再往后就是JVM虚拟机了
    * 所以我们一般会在main调用之前解决掉异常*/
    private static void method2() throws ArithmeticException{
        System.out.println("第一个数");
        int a = new Scanner(System.in).nextInt();
        System.out.println("第二个数");
        int b = new Scanner(System.in).nextInt();
        System.out.println(a / b);
    }

    //捕获
    private static void method1() {
        try {//可能会发生异常的所有代码
            System.out.println("第一个数");
            int a = new Scanner(System.in).nextInt();
            System.out.println("第二个数");
            int b = new Scanner(System.in).nextInt();
            System.out.println(a / b);
        }//catch (ArithmeticException e){//(异常类型 异常名) {捕获预先推测的异常设置的解决方案}
//            System.out.println("1");
//        }catch (InputMismatchException e){
//            System.out.println("2");}
        catch (Exception e) {//忽略所有子异常的差异，统一用父类Exception来接
            //也就是说，不管什么子异常，都能被匹配到，这个是多态最为经典的一种用法
            System.out.println(0);
        }
    }
//暴露异常
    /*ArithmeticException算数异常
     * InputMismatchException输入不匹配异常
     * */

    /**
     * 1.不要害怕BUG，真正的勇士敢于直面自己写的bug
     * 2.学会看报错的提示信息，确定错误的方向，不管第一行有多长，都得看完
     * 3.学会看报错的行号信息，确定自己报错的位置，哪里不对点哪里
     * 注意：源码不会错，要看自己的代码
     */
    private static void method() {
        System.out.println("第一个数");
        int a = new Scanner(System.in).nextInt();
        System.out.println("第二个数");
        int b = new Scanner(System.in).nextInt();
        System.out.println(a / b);

    }
}
